In general, request-centric systems (RCSs), such as file systems and database systems, serve workloads that can include external workloads and/or internal workloads. An external workload is generated by one or more external clients (e.g., applications that provide input/output (I/O) requests to a storage system). An internal workload is generated by the system itself (e.g., the system restores a destroyed replica and the replica recovery process generates an internal I/O workload).
The owners of a RCS can enable users to set quality of service (QoS) goals. In some examples, the QoS goals can include performance goals (e.g., throughput rate, response time, etc.), durability, high availability goals and/or other system-specific technical and business goals. In some examples, goals are expressed in the form of service level agreements (SLAs). In some examples, the goals are associated with penalties that can be applied when one or more goals are not met. Consequently, the owner of a RCS has incentives to maintain QoS goals. On the other hand, the owners of a RCS want to keep the total cost of ownership (TCO) as low as possible. Accordingly, managing a RCS can be performed with the goal of optimizing TCO subject to maintaining QoS goals. Owners may seek to achieve other goals.